<?php
/**
 * 渲染器
 * @author solar
 * @version 1.0
 */
class ViewRenderer 
{
	private $_attributes=array();

	/**
	 * render part
	 * @param string $view 视图
	 * @param string $layout 布局，默认default
	 * @param boolean $return 返回或者直接输出
	 */
	public function render($view,$layout='default',$return=false){		
		$output=$this->renderPartial($view,true);
		$layoutFile=$this->getLayoutFile($layout);
		$output=$this->renderFile($layoutFile,array('content'=>$output));		
		if($return) return $output;
		else echo $output;
	}
	/**
	 * render part
	 * @param string $view 视图
	 * @param boolean $return 返回内容或者直接输出内容
	 */
	public function renderPartial($view,$return=false){
		$viewFile=$this->getViewFile($view);
		$output=$this->renderFile($viewFile);
		if($return===true) return $output;
		else echo $output;
	}
	/**
	 * 渲染视图文件
	 * @param string $viewFile 文件路径
	 */
	private function renderFile($viewFile,$data=null){
		if(is_array($data)) extract($data,EXTR_PREFIX_SAME,'data');
		ob_start();
		ob_implicit_flush(false);
		require($viewFile);
		return ob_get_clean();
	}
	/**
	 * 获取布局文件路径
	 * @param string $layout 布局
	 */
	private function getLayoutFile($layout){
		return PATH_THEME.'/'.THEME.'/layout/'.$layout.File_EXTENSION;
	}
	/**
	 * 获取视图文件路径
	 * @param string $view 视图
	 */
	private function getViewFile($view){
		return PATH_THEME.'/'.THEME.'/view/'.$view.File_EXTENSION;
	}
	/**
	 * PHP getter magic method.
	 * @param string $name property name
	 * @return mixed property value
	 */
	public function __get($name)
	{
		return $this->_attributes[$name];
	}

	/**
	 * PHP setter magic method.
	 * @param string $name property name
	 * @param mixed $value property value
	 */
	public function __set($name,$value)
	{
		$this->_attributes[$name]=$value;
	}
}
?>